package cn.tedu.csmall.stock.webapi.quartz.rabbit;

import cn.tedu.csmall.commons.pojo.stock.entity.Stock;
import cn.tedu.csmall.stock.webapi.quartz.config.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

// Spring连接RabbitMQ的依赖中提供的资源,都保存再Spring容器中
// 所以接收消息的类也要在Spring容器中
@Component
// 和Kafka不同,RabbitMQ接收消息的监听配置要写在类上
@RabbitListener(queues = RabbitMQConfig.STOCK_QUEUE)
@Slf4j
public class RabbitMQConsumer {

    // 类上添加了监听器的注解,但是不能指定收到消息后运行哪个方法
    // 我们需要定义一个方法,在方法上添加@RabbitHandler注解,标记该方法是处理接收消息的方法
    // 这个方法的参数可以直接声明为java的对象
    // 每个类中只允许一个标记为@RabbitHandler的方法
    @RabbitHandler
    public void received(Stock stock){
        // stock就是发送出的消息,直接使用即可
        log.info("接收到消息:{}",stock);
    }


}

